home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / v9n02.arc / BATCHMAN.DOC < prev    next >
Text File  |  1990-01-02  |  31KB  |  688 lines

  1. UTILITIES                                     MICHAEL MEFFORD            
  2. Vol 9 No. 2                      
  3. BATCHMAN
  4.  
  5. This issue's utility, BATCHMAN, is designed both to give your batch files 
  6. significantly more power and to add many of the refinements we all wish DOS
  7. provided.  You can check the DOS version, available memory, or display type 
  8. and then branch accordingly.  You can create colorful menus that branch on a 
  9. user keypress.  And, among its many other capabilities, BATCHMAN will let you 
  10. adjust the keyboard typematic rate and tame the grating DOS beep or turn it 
  11. into a tune.
  12.  
  13. BATCHMAN is actually a collection of 48 batch file enhancement utilities, all
  14. rolled into one 6K program.  This provides more than convenience:  if 
  15. BATCHMAN's utilities were stored separately, at a minimum one cluster each, 
  16. they'd take up about 100K of disk space.  
  17.  
  18. ERRORLEVELS
  19.  
  20. The key to BATCHMAN's operations is the ERRORLEVEL code, a number that programs
  21. can report to DOS when they terminate and that can be acted upon from a batch 
  22. file.  I'll abbreviate ERRORLEVEL as EL for the remainder of this 
  23. documentation.  
  24.     
  25. An EL can have a value between 0 and 255.  Each of the BATCHMAN commands 
  26. returns information as an EL.  An explanation of the syntax of each of the 
  27. BATCHMAN commands and the ELs they return will be found below.  
  28.     
  29. The syntax for BATCHMAN is:
  30.  
  31.     BATCHMAN [command] [arguments] [/R]
  32.  
  33. Entering BATCHMAN without any parameters (or with an invalid parameter) will 
  34. bring up a multi-screen display that lists all the BATCHMAN commands.  The 
  35. optional arguments are parameters for any given command.  If you add the 
  36. optional /R switch, BATCHMAN will display the EL returned from the command.  
  37. The Report option will be most helpful when you are designing and debugging 
  38. your batch files.  Be sure to place BATCHMAN in a directory included on the DOS
  39. PATH so your batch files can find it.
  40.  
  41. THE BATCHMAN COMMANDS
  42.  
  43. I will be using the following conventions throughout the article:  the commands
  44. will be listed first, followed by any parameters they might accept, followed by
  45. the EL the command will return.  I'll put the EL in curley brackets so no one 
  46. will think it's part of the command syntax and try to type it in. For example:
  47.  
  48. CLS [nn]  {EL=0}
  49. If it is entered without the optional nn color argument, the command:
  50.  
  51.    BATCHMAN CLS
  52.  
  53. will clear the screen with whatever color it finds at the current cursor 
  54. position.  This provides the most flexibility when you plan to distribute a 
  55. BATCHMAN batch file to other systems because it retains the user's custom 
  56. color scheme.  
  57.  
  58. If you wish to control the CLS color, just add the color argument nn, where 
  59. nn is a decimal or hexadecimal value derived from the table in Figure 1.  
  60. Hexadecimal numbers need a suffix of "h" to distinguish them from decimal.  
  61. Selecting a color in hex is easier than decimal because each of the 16 possible
  62. values for each of the background and foreground colors fits into a single 
  63. digit:  the first digit is background, the second foreground.
  64.     
  65. To clear the screen so that subsequent DOS output will use blue letters on a 
  66. light gray background, for example, you would enter:
  67.  
  68.    BATCHMAN CLS 71h
  69.  
  70. The first number (7) is the background color, and the second (1) is the 
  71. foreground color.  To do the same using a decimal number requires a little
  72. math: the background color is multiplied by 16 and added to the foreground. 
  73. In the above example, the decimal equivalent would be (7 * 16) + 7 = 113, 
  74. so the equivalent command in decimal would be:
  75.  
  76.    BATCHMAN CLS 113
  77.  
  78. Like its DOS counterpart, BATCHMAN's CLS also homes the cursor to the top left
  79. corner.  Unlike the DOS CLS, however, BATCHMAN's will clear the whole screen
  80. properly in video modes such as the EGA/VGA 43/50 line modes.
  81.  
  82.    CECHO [C] [nn,]string   {EL=0}
  83.  
  84. CECHO is similar to the DOS ECHO command except you can choose the color of the
  85. echoed string.  The nn color value is entered in the same manner as with CLS, 
  86. and again, if you don't enter a color value, BATCHMAN will use the currently 
  87. specified color.  To echo a "Zowie!" to the display in an eye-catching blinking
  88. yellow on red, you would enter:
  89.  
  90.    BATCHMAN CECHO CEh,Zowie!
  91.  
  92. The C (hex) value for the background color normally displays as orange for a 
  93. foreground color.  When used as a background color, however, it displays as the
  94. blinking low intensity counterpart, red.  Keep in mind that any high intensity 
  95. color selected for the background will blink in its corresponding low intensity
  96. color value.
  97.  
  98. The optional C parameter shown in CECHO syntax (don't confuse it with the hex 
  99. C color value in the immediately-preceding example) stands for "no carriage 
  100. returns."  Normally, both CECHO and the DOS ECHO move to the next line after 
  101. echoing a string.  At times this is not desirable.  For example, you might 
  102. wish to echo two strings, with different colors, on the same line.  With 
  103. BATCHMAN you can suppress the carriage return by adding a solitary C as the 
  104. first argument.  For example, to display a red on yellow blinking "Zowie!" 
  105. followed by a normal red on yellow "Batchman!" on the same line your batch file
  106. would consist of:
  107.  
  108.    ECHO OFF
  109.    BATCHMAN CECHO C CEh,Zowie!
  110.    BATCHMAN CECHO 4Eh,Batchman!
  111.  
  112. You can suppress the carriage return to prevent the display from scrolling when
  113. you echo to the last line of the display.  This feature makes full screen menus
  114. feasible, whereas echoing to the last line with the DOS ECHO command causes the
  115. screen to scroll, spoiling any previous display layout.  
  116.  
  117.    SETLOOP  [n]  {EL=0}
  118.    .
  119.    .
  120.    DECLOOP  {EL=SETLOOP-1}
  121.  
  122. You use the SETLOOP and DECLOOP commands when you want to repeat a set of batch
  123. file commands.  SETLOOP sets a loop counter to the n argument, which can be a 
  124. decimal number between 0 and 255.  Once the counter is set, the BATCHMAN 
  125. DECLOOP command will decrement the counter each time it is executed and return 
  126. the new value of the loop counter as an EL.  The short batch file:
  127.  
  128.    ECHO OFF
  129.    BATCHMAN SETLOOP 10
  130.    :HERE
  131.    BATCHMAN CECHO ZONK!
  132.    BATCHMAN DECLOOP
  133.    IF ERRORLEVEL 1 GOTO HERE
  134.  
  135. will echo "ZONK!" to the display 10 times before terminating.  The batch 
  136. processor will branch to the HERE label as long as EL is 1 or greater.
  137.     
  138. Programmers may wonder where the loop counter is stored while other commands 
  139. are executing.  For the SETLOOP and PUSHPATH commands (PUSHPATH/POPPATH will be
  140. discussed below) BATCHMAN creates a small TSR of approximately 500 bytes.  The 
  141. loop counter uses one byte for its storage; the balance is reserved for path 
  142. strings.  When the loop counter becomes zero, the BATCHMAN TSR data area is 
  143. returned to the system memory pool (unless PUSHPATH is also using the data 
  144. area).  Note that since the loop counter is only one byte, you can not do loop 
  145. nesting.
  146.  
  147. If you exit a batch file before SETLOOP has decremented to zero, the TSR data 
  148. area will not be released.  You should construct your batch files so that any 
  149. early exit from a loop will execute a SETLOOP 0 to force a recovery of the TSR 
  150. data area.  BATCHMAN is smart enough not only to find its previous TSR data, 
  151. but will prevent the creation of another if you try to enter two SETLOOP 
  152. commands.
  153.  
  154.    QFORMAT [d:] [N]
  155.      {»EL=0 if successful; EL=1 if not.}
  156.  
  157.  
  158. QFORMAT is designed to wipe out all the files and subdirectories on a floppy 
  159. disk at a single stroke.  To keep you from accidentally trashing your hard 
  160. disk, the command will only accept A: or B: as drive arguments.  All other 
  161. drive requests are ignored, and you can omit the drive argument only if A: or 
  162. B: is your current default drive.
  163.  
  164. As a further precaution, QFORMAT warns you that all data will be lost and 
  165. requires that you press Y and Enter to confirm.  Any other keypress will abort 
  166. the process.  If you don't want BATCHMAN to pause and ask for your approval, 
  167. however, you can add the optional N argument to the command.  The N stands for 
  168. No Ask.  Use this option with caution! 
  169.  
  170. QFORMAT will work only on diskettes that have already been formatted by DOS.  
  171. The DOS FORMAT command puts vital information about the media type, number of 
  172. clusters per FAT, and so forth, in the boot sector of the disk.  BATCHMAN's 
  173. QFORMAT command uses this information to find and place zeros in the FAT and 
  174. root directory sectors of the disk.
  175.  
  176. The reason why QFORMAT can be so fast is that it doesn't have to do the same 
  177. work as the DOS FORMAT command.  FORMAT not only does a low level format, but 
  178. also writes over the entire data area of the disk.  It's the low-level-and-data
  179. -format process that takes forever.  A low level format really needs be done 
  180. only once, and QFORMAT blithely skips that step.  QFORMAT is sophisticated 
  181. enough to preserve bad sector information, however.
  182.  
  183.    PUSHPATH
  184.      {EL=0 if successful; EL=1 if not}
  185.    .
  186.    .
  187.    POPPATH
  188.      {EL=0 if successful; EL=1 if not}
  189.  
  190. PUSHPATH saves the current drive and directory, which can then later be 
  191. restored with POPPATH.  Typically, a batch file that executes an application 
  192. includes a DOS CD command (often a change of drive as well) move operations to
  193. the place where the application resides.  After the application terminates, 
  194. it's usually desirable to return to the original path.  
  195.  
  196. By way of example, to run Lotus 1-2-3 on drive D: and then return to the 
  197. default path afterwards, your batch file would look something like this:
  198.  
  199.    BATCHMAN PUSHPATH
  200.    D:
  201.    CD \123
  202.    123
  203.    BATCHMAN POPPATH
  204.  
  205. PUSHPATH saves the current path in a TSR data area, just as the SETLOOP 
  206. command does.  While only one byte is reserved for SETLOOP's loop counter, 
  207. however, BATCHMAN's TSR data area allows stacking up several paths with 
  208. PUSHPATH.  Subsequent POPPATH commands will retrieve the paths in a LIFO 
  209. (Last In First Out) stack basis.
  210.  
  211. Suppose, for instance, that you're  currently in your directory and you issue 
  212. the following commands:
  213.  
  214.    BATCHMAN PUSHPATH
  215.    CD \DOS 
  216.    BATCHMAN PUSHPATH
  217.    CD \PCMAG
  218.    BATCHMAN POPPATH
  219.    BATCHMAN POPPATH
  220.  
  221. In this sequence, the first POPPATH puts you back into the \DOS subdirectory, 
  222. and the last POPPATH restores you to the root directory from which you started.
  223.  
  224. The number of path layers that can be stored will vary with the length of each 
  225. path pushed onto the stack.  BATCHMAN's TSR area reserves 408 bytes for paths, 
  226. which allows for 6 levels of nested paths if each path is the maximum 65 
  227. characters allowed by DOS.  Shorter path names will allow nesting greater than 
  228. 6 levels.  If necessary, you can change the storage size by modifying the 
  229. DIR_COUNT equate in the assembly listing.
  230.  
  231. BATCHMAN returns an EL of 1 if it finds the stack too full for another 
  232. PUSHPATH or if the stack is already empty with a POPPATH.  Otherwise, the EL 
  233. returned is zero.  When the last path is popped off the stack, the TSR data 
  234. area is discarded and returned to the DOS memory pool.
  235.  
  236. ANSI  {EL=0 if ANSI found;
  237.        EL=1 if not found}
  238.  
  239. This BATCHMAN command is designed simply to determine whether ANSI.SYS is or 
  240. is not installed.  If the EL is 1 you can then branch around any ANSI.SYS 
  241. escape sequences contained in your batch files.  BATCHMAN is smart enough to 
  242. detect not only ANSI.SYS, but my own ANSI.COM alternative 
  243. (see our January 31, 1989, issue), but it will not find other ANSI.SYS 
  244. emulators, such as DesqView's DV-ANSI.
  245.  
  246. BEEP [m,n[;m,n]...]   {EL=0}
  247.  
  248. The BATCHMAN BEEP command gives you a great deal of flexibility in controlling 
  249. the frequency and length of the sound DOS emits in response to a Ctrl-G 
  250. character.  The m,n beep arguments are decimal numbers and are used in pairs,
  251. separated by a comma.  The m value represents the frequency (in Hz.), and n is 
  252. the number of 1/18th second increments that comprise the duration.
  253.     
  254. The frequencies of various musical notes can be found in the table in Figure 2.
  255. The command for a middle C beep of a 1/2 second, for example, would be:
  256.  
  257.    BATCHMAN BEEP 262,9
  258.  
  259. By separating the argument pairs with semicolons, you can produce a series of
  260. tones with the same BEEP command.  You might, for example, find it interesting 
  261. to try:
  262.  
  263.    BATCHMAN BEEP 392,3;523,3;659,3;
  264.    784,3;10,3;659,3;784,12
  265.    
  266. The lowest valid frequency is 19, a very low buzzing sound.  You can use a 
  267. value less than 19 to create pauses between tones:  no sound will be emitted, 
  268. but the duration argument is executed, effectively producing a programmable 
  269. delay between notes.  
  270.  
  271. If you omit all arguments, BEEP defaults to 1046,1--a C note for 1/18 of a 
  272. second.  The DOS Ctrl-G beep is a frequency of 886 that lasts for one second.  
  273. Musically, a frequency of 886 is an out-of-tune A, which probably explains why 
  274. it grates on so many ears.
  275.  
  276.    WAITTIL hh:mm[ss]  
  277.      {EL=0 if successful; EL=1 if aborted}
  278.  
  279. WAITTIL provides a convenient way to pause until a certain time of day.  The 
  280. hh:mm:[ss] argument is the time in hours, minutes, and optionally seconds.  
  281. BATCHMAN will wait until the specified time arrives, but you can manually 
  282. abort the wait by entering any keystroke.  A typical application for WAITTIL 
  283. would be to execute an electronic bulletin board communications program that 
  284. would automatically download messages late at night when rates are lower.
  285.  
  286.    WAITFOR [mm:]ss  
  287.      {EL=0 if successful; EL=1 if aborted}
  288.  
  289. WAITFOR simply pauses for a specified number of minutes (mm) and seconds (ss). 
  290. You can omit the minute part of the argument if you desire.  As with WAITTIL, 
  291. the  WAITFOR delay can be over-ridden by pressing a key.
  292.    
  293.    CURSORTYPE [m,n]
  294.  
  295. You can use CURSORTYPE either to create a cursor size that suits your taste or 
  296. to restore the normal underline cursor after an application alters it. 
  297. Entering CURSORTYPE without any arguments will default to the standard 
  298. underline cursor.  To create a custom cursor, you supply the m,n arguments as 
  299. the start and stop line values.  These values can be either decimal or hex; 
  300. for hex input, add an "h" suffix to the number.
  301.  
  302. The top of the character box is logical line zero; successively-numbered lines 
  303. increment downward.  The valid scan line values used for m and n are 0-7 for a 
  304. CGA, 0-13 for a monochrome or EGA, and 0-15 for a VGA.  The default underline 
  305. cursor start/stop lines are 6,7 for a CGA, 11,12 for a monochrome or EGA, and 
  306. 13,14 for a VGA.  To set an EGA solid block cursor, for example, enter:
  307.  
  308.    BATCHMAN CURSORTYPE 0,13
  309.  
  310. Note that the EGA BIOS on some video boards will attempt to override your 
  311. selections.  BATCHMAN temporarily turns off this BIOS EGA emulation logic for 
  312. all video boards when the cursor type is set, and this seems to work for most 
  313. systems.  However, if entering CURSORTYPE without arguments does not give you 
  314. the normal default underline cursor, you can explicitly request an underline 
  315. cursor that fits your display.  You may need to do this for video modes other
  316. than the normal 25 line modes.  A "wrap around" cursor, in which the stop line 
  317. has a lesser value than the start line, is supported by the hardware of only 
  318. some video systems.
  319.  
  320.    BREAK  {EL=0 if OFF; EL=1 if ON}
  321.  
  322. The BATCHMAN BREAK command returns the current state of DOS's Ctrl-Break 
  323. checking.  You can change the state of BREAK with the DOS command of the same
  324. name.
  325.  
  326.    DRIVEEXIST d:  
  327.      {EL=1 if exist; EL=0 if not}
  328.    DIREXIST directory
  329.      {EL=1 if exist; EL=0 if not}
  330.  
  331. These two BATCHMAN commands are used to return an EL of 1 to your batch files 
  332. if the specified variable exists.
  333.  
  334.    ISVOL [d:]volume
  335.      {EL=1 if exist; EL=0 if not}
  336.  
  337. Similarly, this command returns an EL of 1 if a particular disk volume exists
  338. on the named drive.
  339.  
  340.    YEAR    {EL=year from 1980 
  341.             (0-199), where 0=1980}
  342.    MONTH   {EL=(1-12)}
  343.    DAY     {EL=(1-31)}
  344.    WEEKDAY {EL=(0-6), where 
  345.             Sun=0; Sat=6}
  346.    HOUR    {EL=(0-23)}
  347.    MINUTE  {EL=(0-59)}
  348.    SECOND  {EL=(0-59)}
  349.  
  350. This group of BATCHMAN commands returns the system time and date. Note that 
  351. you can obtain a relatively fine resolution of the time.
  352.  
  353.    VIDEOMODE  {EL=(0-19)}
  354.  
  355. The EL returned by the VIDEOMODE command allows you to determine which of the
  356. possible screen modes listed in Figure 3 is currently being used by your 
  357. display.
  358.  
  359.    ROWS  {EL=display rows}
  360.    COLS  {EL=display columns}
  361.  
  362. These obvious but very handy commands return the current number of rows or 
  363. columns displayed.
  364.  
  365.    SETCURSOR m,n    {EL=0}
  366.  
  367. By supplying values for m (the row) and n (the column) you can use SETCURSOR 
  368. to place your cursor at the specified screen location.  By using SETCURSOR in 
  369. concert with CECHO you can precisely control the location of your messages.  
  370. For example, to display "Gotham City" in blue in the middle of the screen, you
  371. would create the following batch file:
  372.  
  373.    ECHO OFF
  374.    BATCHMAN SETCURSOR 12,35
  375.    BATCHMAN CECHO 1,Gotham City
  376.  
  377. Be sure to include the ECHO OFF command, both so that DOS won't spoil your 
  378. display by echoing the commands, and so that the cursor won't return to the 
  379. beginning of the next line for the CECHO command.
  380.  
  381. A related use of SETCURSOR is to hide the cursor.  You can do this by setting 
  382. the cursor to display on line 26, which is off screen.  Be sure to issue a 
  383. second SETCURSOR command that puts the cursor back on screen once the hidden 
  384. cursor is no longer needed, or you won't be able to see what you type!  If you 
  385. forget,  don't panic.  Just press Esc, blindly type CLS and press Enter, and 
  386. things will return to normal with the cursor homed to the top of the display.
  387.  
  388.    E43V50  
  389.      {EL=0 if successful; EL=1 if not}
  390.  
  391. This BATCHMAN command loads the 8x8 BIOS font for an EGA or VGA monitor.  This 
  392. changes the number of lines displayed to 43 (EGA) or 50 (VGA}.  You can use the
  393. DOS MODE command to return to the normal 25-line display.
  394.  
  395.    PRTSC  {EL=0}
  396.  
  397. This command will execute a printer screen dump exactly as if you had pressed 
  398. Shift-PrtSc on an 83-key keyboard or the dedicated Print Screen key on 101-key 
  399. keyboard.
  400.  
  401.    COMPARE string1 string2
  402.      {EL=0 if match; EL=1 if no match}
  403.  
  404. The BATCHMAN COMPARE makes a case insensitive comparison between two strings.  
  405. For most purposes you'll probably want to use COMPARE instead of the case 
  406. sensitive DOS batch command:
  407.  
  408.    IF string1==string2
  409.  
  410. With the DOS IF string comparison a non-case sensitive match requires two tests
  411. --one for uppercase and one for lowercase.  Even this does not guarantee a 
  412. match if the string is a mixture of upper and lower case, as might occur if a 
  413. batch file were looking for a person's name, for example.  COMPARE solves this 
  414. case problem.  Note that the BATCHMAN COMPARE does not need the double equal 
  415. signs the DOS IF command uses.
  416.  
  417.    CANCOPY filespec [d:]
  418.      {EL=0 if room to copy; EL=1 if not}
  419.  
  420. Before you copy a file or a number of files to another drive (especially a 
  421. floppy disk drive), you can use CANCOPY to see if there is enough room for all 
  422. the specified files.  The filespec you supply can use the DOS ? and * 
  423. wildcards.  If you don't specify the target drive, the default drive is 
  424. checked.  Thus, for example, to check whether the collection of PC Magazine 
  425. utilities you keep in a directory called PCMAG on drive C: will fit onto a 
  426. floppy, you would enter:
  427.  
  428.    BATCHMAN CANCOPY C:\PCMAG\*.* A:
  429.  
  430. BATCHMAN returns an EL of 0 if there is room; otherwise a 1 would be returned. 
  431. If you enter this from the DOS command line, you'll want to include the /R 
  432. option to see the EL returned on screen.
  433.  
  434.    WARMBOOT
  435.    COLDBOOT
  436.  
  437. As their names imply, WARMBOOT and COLDBOOT reboot your system.  WARMBOOT does 
  438. the same thing as pressing Ctrl-Alt-Del; COLDBOOT is like hitting the big red 
  439. switch.  A COLDBOOT does a memory check (among other things) that WARMBOOT 
  440. does not, and it takes a lot more time.  Of course, be forewarned that with 
  441. either of these commands all unsaved data in RAM memory will be lost.  
  442. Note that WARMBOOT and COLDBOOT may not work on some non-compatible systems.
  443.  
  444.    SHIFT ALT | CTRL
  445.      {EL=1 if depressed; EL=0 if not}
  446.  
  447. This command returns the state of either the Alt or Ctrl key.  For example,
  448.  
  449.    BATCHMAN CTRL
  450.  
  451. returns an EL of 1 if the Ctrl key is currently depressed.  You can use the 
  452. SHIFT command along with the BATCHMAN GETKEY command without arguments to 
  453. detect alternate key presses.  (See GETKEY, below, for an example.)
  454.  
  455.    NUMLOCK [ON | OFF]  {EL=0}
  456.    CAPSLOCK [ON | OFF]  {EL=0}
  457.    SCROLLOCK [ON | OFF]  {EL=0}
  458.  
  459. These three self-explanatory commands toggle the current shift state of the 
  460. NumLock, CapsLock or ScrollLock keys when used without the ON or OFF options.
  461. They explicitly turn the three keys on or off if the optional arguments are 
  462. supplied.  
  463.  
  464. Thus, for example:
  465.  
  466.    BATCHMAN NUMLOCK
  467.  
  468. will toggle the NumLock state on if it was off or off if it was on.  Entering
  469.  
  470.    BATCHMAN NUMLOCK OFF
  471.    
  472. will turn the NumLock state off regardless of whether it is currently on or 
  473. off.  This latter would be a useful line in your AUTOEXEC.BAT if you use the 
  474. numeric keypad for cursor navigation instead of number entry.  Note that on 
  475. some keyboards the LED indicator lights may not faithfully track changes in 
  476. shift status.
  477.  
  478.    RENDIR old new {EL=0 if successful; EL=1 if not}
  479.  
  480. Long-time users of our utilities will recognize this command, as it performs 
  481. the same function as the standalone RENDIR utility published in our April 15, 
  482. 1986 issue.  The version presented here will rename a directory, but only on 
  483. systems using DOS 3.0 or later.  To use it simply enter the path of the old 
  484. directory and the new name.
  485.     
  486. For example, to change the name of a temporary directory named TMP on the C: 
  487. drive to a permanent name, say, ROBIN, you would enter:
  488.  
  489.    BATCHMAN RENDIR C:\TMP C:\ROBIN
  490.  
  491. Be sure to include the complete path for both the old and new directory names 
  492. if the directory is other than the default.
  493.  
  494.    ROMDATE  {EL=0}
  495.  
  496. ROMDATE displays the eight bytes of the BIOS date at address FFFF:0005 of the 
  497. ROM BIOS.  Usually, the display will be something like 10/07/87, but some 
  498. clone BIOSs do not have a date.  If no ASCII numbers are found, BATCHMAN 
  499. displays nothing.
  500.  
  501.    GETKEY ['string' n]  {EL=scan code if no ['string' n] list; else
  502.      EL=position in list.}
  503.  
  504. There are probably hundreds of versions of the batch file GETKEY program.  
  505. They return the scan code of the next key you press as an EL. If you enter the 
  506. BATCHMAN GETKEY command without the optional (bracketed) arguments, it will do
  507. the same thing.
  508.  
  509. Entered without arguments, GETKEY can also be used with the BATCHMAN SHIFT 
  510. command to detect Alt- or Ctrl- key combinations.  The scan code for the "Q" 
  511. key is 16.  To check for an Alt-Q keypress (perhaps as a Quit key command), 
  512. you would use the following batch file:
  513.  
  514.    ECHO OFF
  515.    :GETKEY
  516.    BATCHMAN GETKEY
  517.    IF NOT ERRORLEVEL 16 GOTO GETKEY
  518.    BATCHMAN SHIFT ALT
  519.    IF NOT ERRORLEVEL 1 GOTO GETKEY
  520.    ECHO Alt-Q was pressed.
  521.  
  522. GETKEY's optional key list provides still another kind of functionality with 
  523. its optional key list.  The information you need may not be the scan code of a 
  524. given key, but rather its position in a string.  If you supply the optional 
  525. 'string' argument to GETKEY, BATCHMAN will wait either until one of those keys 
  526. listed has been pressed or until you break out of the command with Ctrl-Break 
  527. or Ctrl-C.  An example may helpful here.  With the command:
  528.  
  529.    BATCHMAN GETKEY 'yn'
  530.  
  531. BATCHMAN will wait until either the "Y" or the "N" key or one of the break keys
  532. mentioned above is detected.   All other keypresses are ignored, and if the 
  533. break- out keys are pressed, the EL returned will be 255.  GETKEY is not case 
  534. sensitive, so if either "Y" or "y" is pressed, the EL will be 1, since the "y"
  535. is the first character in the string of valid keypresses.  For "N", an EL of 2 
  536. will return.
  537.  
  538. The string must be enclosed in a pair either of single or double quotes.  If 
  539. you want the single quote included as a valid keypress, enclose it in double 
  540. quotes and vice versa for double quotes, as in the following example:
  541.  
  542.    BATCHMAN GETKEY '"'
  543.  
  544. You can also include the function keys (even the F11 and F12 keys of the 
  545. extended keyboard) in the GETKEY list.  The function key numbers are listed 
  546. without quotes, (they are designated by the n in the command syntax above), and 
  547. may or may not be further identified with a leading "F."  Multiple function 
  548. keys are delimited by either a space, comma or semicolon.  To add the F1 and F2
  549. as valid keys to the "yn" string example above, you would enter either:
  550.  
  551.    BATCHMAN GETKEY "yn" F1 F2
  552.  
  553. or just
  554.  
  555.    BATCHMAN GETKEY "yn" 1 2
  556.  
  557. If F1 is now pressed, the returned EL will be 3, since F1 is the third entry 
  558. in the list.
  559.  
  560.    DOSVER {EL=(major*32)+minor}
  561.  
  562. DOSVER returns an EL representation of the DOS version in use.  DOS version 
  563. numbers have two parts, the Major version (the number to the left of the 
  564. decimal point) and the Minor version (the number to the right).  For DOS 
  565. version 3.10, then, 3 is the major and the 10 is the minor.  Since the largest 
  566. EL number is 255, the DOS version number does not fit conveniently into an EL. 
  567. For DOS 3.10, for example, if the dot is discarded the remaining 310 is too 
  568. large for an EL.  
  569.  
  570. Of course, BATCHMAN could be content to return only the major number, 
  571. truncating anything after the dot, or even the first digit after the dot.  But 
  572. that would be less than sufficient for some applications.  So instead, the 
  573. DOSVER command compresses the version number by multiplying the major number by
  574. 32 and adding it to the minor number.  With DOS 3.30 the result will be (3*32)+
  575. 30=126; with DOS 4.00 it would be 128.  If there had been a DOS version 3.32 
  576. we would have a problem of course, since this would also return 128.  
  577. Historically speaking however, we are safe here.
  578.  
  579.    MAINMEM n | R  {EL=0 if enough} 
  580.    EXPMEM  n | R  {EL=0 if enough} EXTMEM  n | R {EL=0 if enough}
  581.  
  582. The arguments for these three memory commands can be either a decimal number, 
  583. n, or an R.  The decimal argument is used to check whether the desired amount 
  584. of memory (in KB) is free.  If BATCHMAN finds that there is enough free memory
  585. to meet the request, the EL will be 0.  Thus, if an application needs 512K 
  586. bytes of the 640K maximum possible with DOS, you would enter:
  587.  
  588.    BATCHMAN MAINMEM 512
  589.  
  590. The EL will return 0 if there are at least 512K bytes free; otherwise, a 1.  
  591. Your batch file can then branch to an error message if there is not enough 
  592. memory to run the application.  Note that these memory commands do not 
  593. allocate the memory.  They only check if it is free.
  594.  
  595. The alternative R argument stands for Report and will display the current free 
  596. memory of the type requested on the screen.  To see how much free expanded 
  597. memory you have, for example, enter:
  598.  
  599.    BATCHMAN EXPMEM R
  600.  
  601. The report option of the three types of memory will go nicely with BATCHMAN's 
  602. ROMDATE command in a system information batch file.
  603.  
  604.    DISPLAY  {EL=display type}
  605.  
  606. The DISPLAY command will report on the type of display your system has 
  607. installed.  The values returned by DISPLAY as EL codes are:
  608.  
  609.    1=MDA         
  610.    2=CGA         
  611.    4=EGA color  
  612.    5=EGA mono   
  613.    6=PGS
  614.    7=VGA mono
  615.    8=VGA color
  616.   11=MCGA mono
  617.   12=MCGA color
  618.  
  619. CPU 20 {EL=CPU type}
  620.  
  621. Similarly, the CPU command returns an EL that indicates the microprocessor 
  622. used by your machine.  The specific EL numbers are:  1=8086/8088; 2=80186; 
  623. 3=80286; and 4=80386.
  624.  
  625.   WINDOW m,n,w,h[,c,b]  {EL=0 if
  626.   successful; EL=1 if not}
  627.  
  628. The powerful WINDOW command displays screen boxes.  It provides several 
  629. parameters and options.  The first two decimal numbers (m,n) are the row and 
  630. column of the top left hand corner of the window.  The next two decimal 
  631. numbers (w,h) are the desired width and height of the window (including the 
  632. border characters.)
  633.  
  634. The smallest size that WINDOW allows is 2 characters in width and height.  
  635. The optional fifth parameter, c, can be either a hexadecimal or decimal number 
  636. for the color of the window.  If no color argument is supplied, the current 
  637. color of the screen is used by default.  The last parameter, b, sets the type 
  638. of border used to surround the window.  If no parameter is found, spaces are 
  639. used.  If you enter a minus sign for b, a single-line box character will be 
  640. drawn.  An equals sign for b will produce a the double-line box character.  
  641. In all cases, the center of the window is cleared with spaces of the chosen 
  642. color.  For example, the command
  643.  
  644.    BATCHMAN WINDOW 1,1,80,25,17h,=
  645.  
  646. will create a blue window with white double line box characters that will fill
  647. the entire screen, making a nice menu frame.  Text could then be added with 
  648. the BATCHMAN SETCURSOR and CECHO commands.
  649.  
  650.   TYPEMATIC [m,n | N] {EL=0 if
  651.   valid parameters; EL=1 if not}
  652.  
  653.    m=typematic rate (0 - 31);
  654.    larger m=faster rate
  655.  
  656.    n=initial delay  (0 - 3);
  657.    larger n=longer delay
  658.   
  659.    N=normal: m=20; n=1
  660.   
  661.    default: m=25; n=0
  662.  
  663. TYPEMATIC works only with keyboards that support adjustable typematic 
  664. (automatic key repeating) rates at the BIOS level.  That includes most 
  665. machines, starting with the AT, but not for all clones.
  666.     
  667. The first optional decimal parameter, m, is a number between 0 and 31 and 
  668. represents the desired typematic rate.  The larger the m value, the faster 
  669. your keyboard will repeat keystrokes.  The second parameter, n, has a range of 
  670. 0-3, and sets the initial delay.  This delay is the length of time you must 
  671. hold down a key before it begins repeating.  The larger the delay value the 
  672. longer the delay.  The delay parameters are in increments of 1/4 second, with 
  673. 0=1/4 and 3=1 second.  The typematic parameters are divisors and cannot be 
  674. easily be translated into fractions of a second, however, and so should be 
  675. thought of only as a gradient scale.
  676.  
  677. If you don't enter any parameters, TYPEMATIC defaults to what I consider ideal,
  678. a repeat rate of 25 and a delay of 0.  The 25 translates into about 17 
  679. characters per second with an initial delay of 1/4 second.  You can restore 
  680. the typematic 2rate to the normal hardware defaults (11 characters per second 
  681. with a 1/2 second delay) by using the N parameter.  Just enter:
  682.  
  683.    BATCHMAN TYPEMATIC N
  684.  
  685. and the normal values of 20, 1 will be used.  Once you try adding a little 
  686. zoom to your keyboard, however, I don't think you'll ever go back to the 
  687. hardware defaults.
  688.